package com.ruoyi.project.storage.service.impl;

import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.project.common.util.ParameterUtil;
import com.ruoyi.project.storage.domain.Address;
import com.ruoyi.project.storage.mapper.AddressMapper;
import com.ruoyi.project.storage.service.IAddressService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 地址管理业务处理
 *
 * @author mengyuanqing
 * @date 2020/5/11
 */
@Service
@Slf4j
public class AddressServiceImpl implements IAddressService {
    // 通过注释注入
    @Autowired
    private AddressMapper addressMapper;
    /**
     * 地址分页
     *
     * @param address 对象
     * @return 列表
     */
    @Override
    public List<Address> selectAddressList(Address address) {
        // 返回地址分页列表
        return addressMapper.selectAddressList(address);
    }

    /**
     * 地址新增
     *
     * @param address 对象
     * @return 结果
     */
    @Override
    public int insertAddress(Address address) {
        // 设置当前当前用户下所有地址为非默认
        addressMapper.setNotDefaultAddress(address);
        // 校验传进来的地址是否为默认地址
        if (address.getIsDefault()==0){
            log.info("设置地址为非默认");
            // 如果是默认地址则设置为非默认
            address.setIsDefault(1);
        }
        // 设置基础字段
        ParameterUtil.setCreateEntity(address);
        // 设置当前用户userId
        address.setUserId(SecurityUtils.getUserId());
        // 返回插入记录数
        return addressMapper.insertAddress(address);
    }

    /**
     * 地址编辑
     *
     * @param address 对象
     * @return 结果
     */
    @Override
    public int updateAddress(Address address) {
        // 设置当前用户userId
        address.setUserId(SecurityUtils.getUserId());
        // 查询当前用户id是否有默认地址
        Long a = addressMapper.selectAddressId(address);
        // 如果默认地址存在的话
        if (a!=0){
            // 如果我把地址修改为默认，并且我当前用户id下，我要设置的默认地址的地址id和我已经是默认地址的地址id不相等的话，那么我将把我所有地址id设为非默认，并且把我传进来的地址id设为默认
            if (address.getIsDefault()==0 && !address.getId().equals(a)){
                // 修改当前默认地址,全部设置为非默认
                addressMapper.setNotDefaultAddress(address);
            }
        }
        // 设置基础字段
        ParameterUtil.setUpdateEntity(address);
        // 返回修改条数
        return addressMapper.updateAddress(address);
    }

    /**
     * 地址删除
     *
     * @param ids 地址id
     * @return 结果
     */
    @Override
    public int deleteAddressByIds(Long[] ids) {
        // 返回结果
        return addressMapper.deleteAddressByIds(ParameterUtil.getBatchUpdateMapByIds(ids));
    }

    /**
     * 设置默认地址
     *
     * @param id 传进来的地址id
     * @return 结果
     */
    @Override
    public int setDefaultAddress(Long id) {
        // 实例化地址对象
        Address address =new Address();
        // 设置当前用户id
        address.setUserId(SecurityUtils.getUserId());
        // 设置基础修改字段
        ParameterUtil.setUpdateEntity(address);
        // 修改当前用户的所有默认地址为非默认
        log.info("设置当前用户的所有地址为非默认");
        addressMapper.setNotDefaultAddress(address);
        // 返回结果
        return addressMapper.setDefaultAddress(id);
    }

    /**
     * 查找当前用户默认地址
     *
     * @param address 地址对象
     * @return 结果
     */
    @Override
    public Address selectDefaultAddress(Address address) {
        // 返回查找结果
        return addressMapper.selectDefaultAddress(address);
    }
}
